//
//  IMDeviceInfoModels.h
//  DualMediationSDK
//
//  Created by YeJary on 2025/1/27.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * 设备信息结果模型
 */
@interface IMDeviceInfoResult : NSObject

/// 是否成功
@property (nonatomic, assign, readonly) BOOL success;

/// 错误码（失败时）
@property (nonatomic, assign, readonly) NSInteger errorCode;

/// 错误信息（失败时）
@property (nonatomic, copy, readonly, nullable) NSString *errorMessage;

/// 结果数据
@property (nonatomic, strong, readonly, nullable) id data;

/**
 * 创建成功结果
 * @param data 结果数据
 * @return 结果实例
 */
+ (instancetype)successWithData:(nullable id)data;

/**
 * 创建失败结果
 * @param errorCode 错误码
 * @param errorMessage 错误信息
 * @return 结果实例
 */
+ (instancetype)failureWithCode:(NSInteger)errorCode message:(NSString *)errorMessage;

@end

/**
 * 设备屏幕信息
 */
@interface IMDeviceScreenInfo : NSObject

/// 屏幕宽度（像素）
@property (nonatomic, assign, readonly) CGFloat screenWidth;

/// 屏幕高度（像素）
@property (nonatomic, assign, readonly) CGFloat screenHeight;

/// 宽高比
@property (nonatomic, assign, readonly) CGFloat aspectRatio;

/// 是否为短屏设备（宽高比>0.5622）
@property (nonatomic, assign, readonly) BOOL isShortDevice;

/// 设备类型描述
@property (nonatomic, copy, readonly) NSString *deviceTypeDescription;

/**
 * 创建屏幕信息
 * @param width 屏幕宽度
 * @param height 屏幕高度
 * @return 屏幕信息实例
 */
+ (instancetype)infoWithWidth:(CGFloat)width height:(CGFloat)height;

@end

/**
 * 国家信息
 */
@interface IMCountryInfo : NSObject

/// 国家代码（ISO 3166-1标准两字母代码）
@property (nonatomic, copy, readonly) NSString *countryCode;

/// 国家名称（英文）
@property (nonatomic, copy, readonly, nullable) NSString *countryName;

/// 获取方式（IP、Locale等）
@property (nonatomic, copy, readonly) NSString *source;

/**
 * 创建国家信息
 * @param countryCode 国家代码
 * @param countryName 国家名称
 * @param source 获取方式
 * @return 国家信息实例
 */
+ (instancetype)infoWithCountryCode:(NSString *)countryCode 
                        countryName:(nullable NSString *)countryName 
                             source:(NSString *)source;

@end

/**
 * 设备信息回调
 * @param result 获取结果
 */
typedef void(^IMDeviceInfoCompletionBlock)(IMDeviceInfoResult *result);

NS_ASSUME_NONNULL_END